package com.warframe;

import com.sobte.cqp.jcq.entity.*;
import com.sobte.cqp.jcq.event.JcqAppAbstract;
import com.tools.HibernateUtils;
import com.tools.StringContent;
import com.warframe.entity.message.Message;
import com.warframe.message.Executor;
import com.warframe.message.Interpreter;

import javax.swing.*;

public class robot extends JcqAppAbstract implements ICQVer, IMsg, IRequest {

    private static Executor executor = Executor.getInstance();
    private static Thread executorThread = new Thread(executor);
    private static Interpreter interpreter = Interpreter.getInstance();
    private static Thread interpreterThread = new Thread(interpreter);

    public static void main(String[] args) throws InterruptedException {
        CQ = new CQDebug();
        CQ.logInfo("[JCQ] TEST Demo", "测试启动");// 现在就可以用CQ变量来执行任何想要的操作了
        // 要测试主类就先实例化一个主类对象
        robot robot = new robot();
        // 下面对主类进行各方法测试,按照JCQ运行过程，模拟实际情况
        robot.startup();// 程序运行开始 调用应用初始化方法
        robot.enable();// 程序初始化完成后，启用应用，让应用正常工作

        robot.groupMsg(1, 10001, 553833612L, 576686714L, "", "OPENACTIVITY", 0);

        robot.groupMsg(1, 10001, 553833612L, 1, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 2, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 3, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 4, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 5, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 6, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 7, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 8, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 9, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 11, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 12, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 13, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 14, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 15, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 16, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 17, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 18, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 19, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 20, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 21, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 22, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 23, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 24, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 25, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 26, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 27, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 28, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 29, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 30, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 31, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 32, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 33, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 34, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 35, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 36, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 37, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 38, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 39, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 40, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1011, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1012, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1013, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1014, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1015, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1016, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1017, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1018, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1019, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10110, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10111, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10112, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10113, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10114, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10115, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10116, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10117, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10118, "", "抽奖", 0);

        robot.groupMsg(1, 10001, 553833612L, 576686714L, "", "CLOSEACTIVITY", 0);


        robot.groupMsg(1, 10001, 553833612L, 10119, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10120, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10121, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10122, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10123, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10124, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10125, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10126, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10127, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10128, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10129, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10130, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10131, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10132, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10133, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10134, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10135, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10136, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10137, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10138, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10139, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10140, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1021, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1022, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1023, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1024, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1025, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1026, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1027, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1028, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 1029, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10210, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10211, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10212, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10213, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10214, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10215, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10216, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10217, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10218, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10219, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10220, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10221, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10222, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10223, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10224, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10225, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10226, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10227, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10228, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10229, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10230, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10231, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10232, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10233, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10234, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10235, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10236, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10237, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10238, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10239, "", "抽奖", 0);
        robot.groupMsg(1, 10001, 553833612L, 10240, "", "抽奖", 0);
//        robot.groupMsg(1, 10001, 576686714L, 576686714L, "",
//                "入侵", 0);
//        robot.groupMsg(1, 10001, 576686714L, 576686714L, "",
//                "时间", 0);
//        robot.groupMsg(1, 10001, 576686714L, 576686714L, "",
//                "裂隙", 0);
//        robot.groupMsg(1, 10002, 576686714L, 576686714L, "",
//                "突擊", 0);
//        robot.groupMsg(1, 10001, 576686714L,
//                576686714L, "", "pk 瓦瞄", 0);
//        robot.privateMsg(1, 10001, 576686714, "pk 瓦瞄", 9);
//        robot.privateMsg(1, 10001, 576686714, "时间", 9);
//        robot.groupMemberIncrease(1, 1000, 784654061L, 0000L, 0000L);
//        robot.groupMsg(1, 10001, 576686714L,
//                576686714L, "", "jb", 4);
//        robot.privateMsg(1, 10001, 576686714L,
//                 "wm 巨浪 弓臂" , 4);
//        Thread.sleep(2000);
//        robot.privateMsg(1, 10001, 576686714L,
//                "wm 西诺斯" ,5);
//        robot.privateMsg(1, 10001, 576686714L,
//                "wm mag" ,5);
//        Thread.sleep(5000);
//        robot.privateMsg(1, 10001, 576686714L,
//                "1" ,5);
//        robot.privateMsg(1, 10001, 576686714L,
//                "2" ,5);
//        robot.privateMsg(1, 10001, 576686714L,
//                "3" ,5);
//        robot.privateMsg(1, 10001, 576686714L,
//                "1" ,5);
//        robot.groupMsg(1, 10002, 576686714L,
//                576686714L, "", "Riven 格拉姆", 6);
//        System.out.println(str);
    }

    /**
     * 打包后将不会调用 请不要在此事件中写其他代码
     *
     * @return 返回应用的ApiVer、Appid
     */
    public String appInfo() {
        // 应用AppID,规则见 http://d.cqp.me/Pro/开发/基础信息#appid
        String AppID = "com.warframe.robot";// 记住编译后的文件和json也要使用appid做文件名
        /**
         * 本函数【禁止】处理其他任何代码，以免发生异常情况。
         * 如需执行初始化代码请在 startup 事件中执行（Type=1001）。
         */
        return CQAPIVER + "," + AppID;
    }

    /**
     * 酷Q启动 (Type=1001)<br>
     * 本方法会在酷Q【主线程】中被调用。<br>
     * 请在这里执行插件初始化代码。<br>
     * 请务必尽快返回本子程序，否则会卡住其他插件以及主程序的加载。
     *
     * @return 请固定返回0
     */
    public int startup() {
        // 获取应用数据目录(无需储存数据时，请将此行注释)
        HibernateUtils hibernateUtils = new HibernateUtils();
        StringContent stringContent = new StringContent();
        executorThread.start();
        executor.setCQ(CQ);
        interpreterThread.start();
        interpreter.setCQ(CQ);
        // 返回如：D:\CoolQ\app\com.sobte.cqp.jcq\app\com.example.demo\
        // 应用的所有数据、配置【必须】存放于此目录，避免给用户带来困扰。
        return 0;
    }

    /**
     * 酷Q退出 (Type=1002)<br>
     * 本方法会在酷Q【主线程】中被调用。<br>
     * 无论本应用是否被启用，本函数都会在酷Q退出前执行一次，请在这里执行插件关闭代码。
     *
     * @return 请固定返回0，返回后酷Q将很快关闭，请不要再通过线程等方式执行其他代码。
     */
    public int exit() {
        executor.quit();
        interpreter.quit();
        HibernateUtils.close();
        return 0;
    }

    /**
     * 应用已被启用 (Type=1003)<br>
     * 当应用被启用后，将收到此事件。<br>
     * 如果酷Q载入时应用已被启用，则在 {@link #startup startup}(Type=1001,酷Q启动) 被调用后，本函数也将被调用一次。<br>
     * 如非必要，不建议在这里加载窗口。
     *
     * @return 请固定返回0。
     */
    public int enable() {
        enable = true;
        return 0;
    }

    /**
     * 应用将被停用 (Type=1004)<br>
     * 当应用被停用前，将收到此事件。<br>
     * 如果酷Q载入时应用已被停用，则本函数【不会】被调用。<br>
     * 无论本应用是否被启用，酷Q关闭前本函数都【不会】被调用。
     *
     * @return 请固定返回0。
     */
    public int disable() {
        enable = false;
        return 0;
    }

    /**
     * 私聊消息 (Type=21)<br>
     * 本方法会在酷Q【线程】中被调用。<br>
     *
     * @param subType 子类型，11/来自好友 1/来自在线状态 2/来自群 3/来自讨论组
     * @param msgId   消息ID
     * @param fromQQ  来源QQ
     * @param msg     消息内容
     * @param font    字体
     * @return 返回值*不能*直接返回文本 如果要回复消息，请调用api发送<br>
     * 这里 返回  {@link IMsg#MSG_INTERCEPT MSG_INTERCEPT} - 截断本条消息，不再继续处理<br>
     * 注意：应用优先级设置为"最高"(10000)时，不得使用本返回值<br>
     * 如果不回复消息，交由之后的应用/过滤器处理，这里 返回  {@link IMsg#MSG_IGNORE MSG_IGNORE} - 忽略本条消息
     */
    public int privateMsg(int subType, int msgId, long fromQQ, String msg, int font) {
        // 这里处理消息
        interpreter.pushMsg(new Message(subType, msgId, fromQQ, msg));
        //CQ.sendPrivateMsg(fromQQ, "你发送了这样的消息：" + msg + "\n来自Java插件");
        return MSG_IGNORE;
    }

    /**
     * 群消息 (Type=2)<br>
     * 本方法会在酷Q【线程】中被调用。<br>
     *
     * @param subType       子类型，目前固定为1
     * @param msgId         消息ID
     * @param fromGroup     来源群号
     * @param fromQQ        来源QQ号
     * @param fromAnonymous 来源匿名者
     * @param msg           消息内容
     * @param font          字体
     * @return 关于返回值说明, 见 {@link #privateMsg 私聊消息} 的方法
     */
    public int groupMsg(int subType, int msgId, long fromGroup, long fromQQ, String fromAnonymous, String msg,
                        int font) {
        // 如果消息来自匿名者
        if (fromQQ == 80000000L && !fromAnonymous.equals("")) {
            // 将匿名用户信息放到 anonymous 变量中
            Anonymous anonymous = CQ.getAnonymous(fromAnonymous);
        }

        // 解析CQ码案例 如：[CQ:at,qq=100000]
        // 解析CQ码 常用变量为 CC(CQCode) 此变量专为CQ码这种特定格式做了解析和封装
        // CC.analysis();// 此方法将CQ码解析为可直接读取的对象
        // 解析消息中的QQID
        //long qqId = CC.getAt(msg);// 此方法为简便方法，获取第一个CQ:at里的QQ号，错误时为：-1000
        //List<Long> qqIds = CC.getAts(msg); // 此方法为获取消息中所有的CQ码对象，错误时返回 已解析的数据
        // 解析消息中的图片
        //CQImage image = CC.getCQImage(msg);// 此方法为简便方法，获取第一个CQ:image里的图片数据，错误时打印异常到控制台，返回 null
        //List<CQImage> images = CC.getCQImages(msg);// 此方法为获取消息中所有的CQ图片数据，错误时打印异常到控制台，返回 已解析的数据

        // 这里处理消息
        interpreter.pushMsg(new Message(subType, msgId, fromGroup, fromQQ, msg));
        //CQ.sendGroupMsg(fromGroup, CC.at(fromQQ) + "你发送了这样的消息：" + msg + "\n来自Java插件");
        return MSG_IGNORE;
    }

    /**
     * 讨论组消息 (Type=4)<br>
     * 本方法会在酷Q【线程】中被调用。<br>
     *
     * @param subtype     子类型，目前固定为1
     * @param msgId       消息ID
     * @param fromDiscuss 来源讨论组
     * @param fromQQ      来源QQ号
     * @param msg         消息内容
     * @param font        字体
     * @return 关于返回值说明, 见 {@link #privateMsg 私聊消息} 的方法
     */
    public int discussMsg(int subtype, int msgId, long fromDiscuss, long fromQQ, String msg, int font) {
        // 这里处理消息

        return MSG_IGNORE;
    }

    /**
     * 群文件上传事件 (Type=11)<br>
     * 本方法会在酷Q【线程】中被调用。<br>
     *
     * @param subType   子类型，目前固定为1
     * @param sendTime  发送时间(时间戳)// 10位时间戳
     * @param fromGroup 来源群号
     * @param fromQQ    来源QQ号
     * @param file      上传文件信息
     * @return 关于返回值说明, 见 {@link #privateMsg 私聊消息} 的方法
     */
    public int groupUpload(int subType, int sendTime, long fromGroup, long fromQQ, String file) {
        GroupFile groupFile = CQ.getGroupFile(file);
        if (groupFile == null) { // 解析群文件信息，如果失败直接忽略该消息
            return MSG_IGNORE;
        }
        // 这里处理消息
        return MSG_IGNORE;
    }

    /**
     * 群事件-管理员变动 (Type=101)<br>
     * 本方法会在酷Q【线程】中被调用。<br>
     *
     * @param subtype        子类型，1/被取消管理员 2/被设置管理员
     * @param sendTime       发送时间(时间戳)
     * @param fromGroup      来源群号
     * @param beingOperateQQ 被操作QQ
     * @return 关于返回值说明, 见 {@link #privateMsg 私聊消息} 的方法
     */
    public int groupAdmin(int subtype, int sendTime, long fromGroup, long beingOperateQQ) {
        // 这里处理消息

        return MSG_IGNORE;
    }

    /**
     * 群事件-群成员减少 (Type=102)<br>
     * 本方法会在酷Q【线程】中被调用。<br>
     *
     * @param subtype        子类型，1/群员离开 2/群员被踢
     * @param sendTime       发送时间(时间戳)
     * @param fromGroup      来源群号
     * @param fromQQ         操作者QQ(仅子类型为2时存在)
     * @param beingOperateQQ 被操作QQ
     * @return 关于返回值说明, 见 {@link #privateMsg 私聊消息} 的方法
     */
    public int groupMemberDecrease(int subtype, int sendTime, long fromGroup, long fromQQ, long beingOperateQQ) {
        // 这里处理消息

        return MSG_IGNORE;
    }

    /**
     * 群事件-群成员增加 (Type=103)<br>
     * 本方法会在酷Q【线程】中被调用。<br>
     *
     * @param subtype        子类型，1/管理员已同意 2/管理员邀请
     * @param sendTime       发送时间(时间戳)
     * @param fromGroup      来源群号
     * @param fromQQ         操作者QQ(即管理员QQ)
     * @param beingOperateQQ 被操作QQ(即加群的QQ)
     * @return 关于返回值说明, 见 {@link #privateMsg 私聊消息} 的方法
     */
    public int groupMemberIncrease(int subtype, int sendTime, long fromGroup, long fromQQ, long beingOperateQQ) {
        // 这里处理消息
        Message message = new Message();
        message.setSign(StringContent.NEWJOIN);
        message.setGroupId(fromGroup);
        message.setFromQQ(beingOperateQQ);
        Executor.getInstance().pushMsg(message);

        return MSG_IGNORE;
    }

    /**
     * 好友事件-好友已添加 (Type=201)<br>
     * 本方法会在酷Q【线程】中被调用。<br>
     *
     * @param subtype  子类型，目前固定为1
     * @param sendTime 发送时间(时间戳)
     * @param fromQQ   来源QQ
     * @return 关于返回值说明, 见 {@link #privateMsg 私聊消息} 的方法
     */
    public int friendAdd(int subtype, int sendTime, long fromQQ) {
        // 这里处理消息

        return MSG_IGNORE;
    }

    /**
     * 请求-好友添加 (Type=301)<br>
     * 本方法会在酷Q【线程】中被调用。<br>
     *
     * @param subtype      子类型，目前固定为1
     * @param sendTime     发送时间(时间戳)
     * @param fromQQ       来源QQ
     * @param msg          附言
     * @param responseFlag 反馈标识(处理请求用)
     * @return 关于返回值说明, 见 {@link #privateMsg 私聊消息} 的方法
     */
        /**
         * REQUEST_ADOPT 通过
         * REQUEST_REFUSE 拒绝
         */
    public int requestAddFriend(int subtype, int sendTime, long fromQQ, String msg, String responseFlag) {
        // 这里处理消息


        // CQ.setFriendAddRequest(responseFlag, REQUEST_ADOPT, null); // 同意好友添加请求
        return MSG_IGNORE;
    }

    /**
     * 请求-群添加 (Type=302)<br>
     * 本方法会在酷Q【线程】中被调用。<br>
     *
     * @param subtype      子类型，1/他人申请入群 2/自己(即登录号)受邀入群
     * @param sendTime     发送时间(时间戳)
     * @param fromGroup    来源群号
     * @param fromQQ       来源QQ
     * @param msg          附言
     * @param responseFlag 反馈标识(处理请求用)
     * @return 关于返回值说明, 见 {@link #privateMsg 私聊消息} 的方法
     */
    /**
     * REQUEST_ADOPT 通过
     * REQUEST_REFUSE 拒绝
     * REQUEST_GROUP_ADD 群添加
     * REQUEST_GROUP_INVITE 群邀请
     */
    public int requestAddGroup(int subtype, int sendTime, long fromGroup, long fromQQ, String msg,
                               String responseFlag) {
        // 这里处理消息

		/*if(subtype == 1){ // 本号为群管理，判断是否为他人申请入群
			CQ.setGroupAddRequest(responseFlag, REQUEST_GROUP_ADD, REQUEST_ADOPT, null);// 同意入群
		}
		if(subtype == 2){
			CQ.setGroupAddRequest(responseFlag, REQUEST_GROUP_INVITE, REQUEST_ADOPT, null);// 同意进受邀群
		}*/
        if (subtype == 1) {
            CQ.setGroupAddRequestV2(responseFlag, REQUEST_GROUP_ADD, REQUEST_ADOPT, null);
        }
        return MSG_IGNORE;
    }

    /**
     * 本函数会在JCQ【线程】中被调用。
     *
     * @return 固定返回0
     */
    public int menuA() {
        JOptionPane.showMessageDialog(null, "这是测试菜单A，可以在这里加载窗口");
        return 0;
    }

    /**
     * 本函数会在酷Q【线程】中被调用。
     *
     * @return 固定返回0
     */
    public int menuB() {
        JOptionPane.showMessageDialog(null, "这是测试菜单B，可以在这里加载窗口");
        return 0;
    }

}
